package com.hifar.test.api.util;

import com.hifar.test.api.model.DataResponse;
import com.hifar.test.api.model.ResponseData;
import com.hifar.test.api.model.UnifiedResponse;
import com.hifar.sys.BusiResponse;

/**
 * 响应格式转换工具类
 * 用于统一不同响应格式之间的转换
 */
public class ResponseConverter {
    
    /**
     * 将DataResponse转换为UnifiedResponse
     * 
     * @param dataResponse 原始DataResponse
     * @return 统一格式响应
     */
    public static UnifiedResponse<ResponseData> convertToUnified(DataResponse dataResponse) {
        if (dataResponse == null) {
            return UnifiedResponse.failure("ERROR", "响应数据为空", null);
        }
        
        if (dataResponse.getStatus() == 1) {
            return UnifiedResponse.success("操作成功", dataResponse.getData());
        } else {
            return UnifiedResponse.failure("BUSINESS_ERROR", dataResponse.getMessage(), dataResponse.getData());
        }
    }
    
    /**
     * 将BusiResponse转换为UnifiedResponse
     * 
     * @param busiResponse 原始BusiResponse
     * @return 统一格式响应
     */
    @SuppressWarnings("rawtypes")
    public static UnifiedResponse<Object> convertToUnified(BusiResponse busiResponse) {
        if (busiResponse == null) {
            return UnifiedResponse.failure("ERROR", "响应数据为空", null);
        }
        
        // 根据BusiResponse的内部状态判断成功失败
        // 这里需要根据实际的BusiResponse结构来判断
        return UnifiedResponse.success("操作成功", busiResponse.getData());
    }
    
    /**
     * 创建成功响应
     * 
     * @param message 成功消息
     * @param data 响应数据
     * @return 统一格式响应
     */
    public static <T> UnifiedResponse<T> createSuccess(String message, T data) {
        return UnifiedResponse.success(message, data);
    }
    
    /**
     * 创建失败响应
     * 
     * @param code 错误码
     * @param message 错误消息
     * @param data 响应数据
     * @return 统一格式响应
     */
    public static <T> UnifiedResponse<T> createFailure(String code, String message, T data) {
        return UnifiedResponse.failure(code, message, data);
    }
    
    /**
     * 创建认证错误响应
     * 
     * @param code 错误码
     * @param message 错误消息
     * @param suggestion 建议
     * @return 统一格式响应
     */
    public static UnifiedResponse<UnifiedResponse.AuthErrorData> createAuthError(
            String code, String message, String suggestion) {
        return UnifiedResponse.authError(code, message, suggestion);
    }
    
    /**
     * 创建业务错误响应
     * 
     * @param code 错误码
     * @param message 错误消息
     * @param data 响应数据
     * @return 统一格式响应
     */
    public static <T> UnifiedResponse<T> createBusinessError(String code, String message, T data) {
        return UnifiedResponse.businessError(code, message, data);
    }
}
